home *** CD-ROM | disk | FTP | other *** search
/ The Programmer Disk / The Programmer Disk (Microforum).iso / xpro / c4 / pro13 / path.c < prev    next >
C/C++ Source or Header  |  1990-09-30  |  1KB  |  69 lines

  1. /***********************************************************
  2.     path.c -- convert to MS-DOS's pathname
  3. ***********************************************************/
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include "lh.h"
  7.  
  8. char *form_name(unsigned char *p, int i)
  9. {
  10.     int j, kflg;
  11.  
  12.     kflg = 0;
  13.     for (j = 0; j < i; j++) {
  14.         if (*p == 0) break;
  15.         else if (kflg) kflg = 0;
  16.         else if (iskanji(*p)) kflg = 1;
  17.         else if (strchr("\"*+,./:;<=>?[\\]|\xff", *p) || *p <= ' ' || 
  18.                  *p == swchar) *p = '_';
  19.         p++;
  20.     }
  21.     if (kflg) p--;
  22.     *p = '\0';
  23.     return p;
  24. }
  25.  
  26. void form_identifier(char *p)
  27. {
  28.     char *q, *r;
  29.  
  30.     q = strrchr(p, '.');
  31.     if (q) {
  32.         *q = '\0';
  33.         r = form_name(p, 8);
  34.         *r++ = '.';
  35.         q++;
  36.         form_name(q, 3);
  37.         strcpy(r, q);
  38.     } else {
  39.         form_name(p, 8);
  40.     }
  41. }
  42.  
  43. void form_path(char *p)
  44. {
  45.     char *q, *r;
  46.  
  47.     if (*p == DELIM) p++;
  48.     r = p;
  49.     q = strchr(p, DELIM);
  50.     while (q) {
  51.         *q = '\0';
  52.         form_identifier(p);
  53.         r = stpcpy(r, p);
  54.         *r++ = DELIM;
  55.         p = q + 1;
  56.         q = strchr(p, DELIM);
  57.     }
  58.     form_identifier(p);
  59.     strcpy(r, p);
  60. }
  61.  
  62. #ifdef DEBUG
  63. void main(int argc, char *argv[])
  64. {
  65.     form_path(argv[1]);
  66.     printf("%s\n", argv[1]);
  67. }
  68. #endif
  69.